package com.jus.player.util;

import static android.content.Context.MODE_PRIVATE;

import android.content.Context;
import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.os.Build;
import android.telephony.TelephonyManager;
import android.util.Log;

import java.util.Locale;

/**
 * 管理语言设置工具类
 */
public class LanguageUtils {

    private static final String APP_SETTINGS = "AppSettings";
    private static final String LANGUAGE = "language";

    public static final String ZH_CN = "cn";
    public static final String ZH_TW = "zh-TW";
    public static final String EN = "en";

    /**
     * 初始化应用语言
     *
     * @param context Context
     */
    public static void initAppLanguage(Context context) {

        context.getSharedPreferences(APP_SETTINGS, MODE_PRIVATE)
                .edit().remove(LANGUAGE)
                .apply();
        setAppLanguage(context, getCurrentLanguage(context));
    }

    /**
     * 用户设置语言时保存设置记录，下次启动使用上次设置的语言
     *
     * @param context 上下文
     */
    public static void applyLanguage(Context context, String languageCode) {

        // 保存语言设置到 SharedPreferences
        context.getSharedPreferences(APP_SETTINGS, MODE_PRIVATE)
                .edit()
                .putString(LANGUAGE, languageCode)
                .apply();
        setAppLanguage(context, languageCode);
    }

    /**
     * 设置应用语言
     *
     * @param context      上下文
     * @param languageCode 语言代码
     */
    private static void setAppLanguage(Context context, String languageCode) {
        Locale systemLocale = Locale.getDefault();
        Log.d("LanguageUtils", "System language: " + systemLocale.getLanguage()
                + ", country: " + systemLocale.getCountry());
        Locale locale = getLocaleFromLanguageCode(languageCode);
        //Locale locale = new Locale(languageCode);
        Locale.setDefault(locale);
        Resources resources = context.getResources();
        Configuration config = resources.getConfiguration();

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
            config.setLocale(locale);
        } else {
            config.locale = locale;
        }
        resources.updateConfiguration(config, resources.getDisplayMetrics());
        context.createConfigurationContext(config);
    }

    /**
     * zh-CN ：中国大陆使用的简体中文，符合GB/T 2312编码规范；
     * zh-TW ：中国台湾地区使用的繁体中文，采用Big5或Unicode编码；
     * zh-HK ：中国香港特别行政区的繁体中文，部分用词与台湾存在差异；
     * zh-MO ：中国澳门特别行政区的繁体中文，与香港版本高度相似；
     * zh-SG ：新加坡的简体中文，含部分本地化词汇（如“组屋”）。
     * 获取当前语言，如果没有保存语言，默认使用系统语言
     *
     * @param context
     * @return
     */
    public static String getCurrentLanguage(Context context) {
        //跟随上次设置语言
        return context.getSharedPreferences(APP_SETTINGS, MODE_PRIVATE)
                .getString(LANGUAGE, getSystemLanguageCode());
    }


    // 获取系统语言代码
    private static String getSystemLanguageCode() {
        String systemLanguage = Locale.getDefault().getLanguage();
        String systemCountry = Locale.getDefault().getCountry();
        //systemCountry.equals("TW") || systemCountry.equals("HK")
        if (systemLanguage.equals(EN)) {
            return EN;
        }
        if (systemLanguage.equals("zh") && !systemCountry.equals("CN")) {
            return ZH_TW; // 繁体中文
        }
        return ZH_CN;
    }

    // 根据语言代码获取 Locale
    private static Locale getLocaleFromLanguageCode(String languageCode) {
        switch (languageCode) {
            case ZH_CN:
                return Locale.SIMPLIFIED_CHINESE;
            case ZH_TW:
                return Locale.TRADITIONAL_CHINESE;
            default:
                return Locale.ENGLISH;
        }
    }

}


